package com.zwl.swagger.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
import java.util.Set;


/**
 * @author zhangweilin
 * @date 2019/6/8 10:58
 * @Description: 文件工具类
 */
public class SwaggerFileUtil {

    public static void writeFile(String fileName, String filePath, String content) {
        try {
            // 判断文件是否存在，不存在创建
            File f = new File(filePath + fileName);
            if (!f.exists()) {
                File f2 = new File(filePath);
                f2.mkdirs();
                f.createNewFile();
            }
            OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
            outputStreamWriter.write(content);
            outputStreamWriter.flush();
            outputStreamWriter.close();
        } catch (Exception e) {
            System.err.println(e);
        }

    }

    /**
     * 创建多级目录
     */
    public static void createDir(String path) {
        File file = new File(path);
        mkDir(file);


    }

    private static void setPermission(File file) {
        file.setWritable(true, false);
        file.setExecutable(true, false);
        file.setReadable(true, false);
        //设置权限
        Set<PosixFilePermission> perms = new HashSet<PosixFilePermission>();
        perms.add(PosixFilePermission.OWNER_READ); //设置所有者的读取权限
        perms.add(PosixFilePermission.OWNER_WRITE); //设置所有者的写权限
        perms.add(PosixFilePermission.OWNER_EXECUTE); //设置所有者的执行权限
        perms.add(PosixFilePermission.GROUP_READ); //设置组的读取权限
        perms.add(PosixFilePermission.GROUP_EXECUTE); //设置组的读取权限
        perms.add(PosixFilePermission.GROUP_WRITE); //设置组的写权限
        perms.add(PosixFilePermission.OTHERS_READ); //设置其他的读取权限
        perms.add(PosixFilePermission.OTHERS_EXECUTE); //设置其他的读取权限
        perms.add(PosixFilePermission.OTHERS_WRITE); //设置其他的写权限
        try {
            //设置文件和文件夹的权限
            Path pathParent = Paths.get(file.getParentFile().getAbsolutePath());
            Path pathDest = Paths.get(file.getAbsolutePath());
            Files.setPosixFilePermissions(pathParent, perms);   //修改文件夹路径的权限
            Files.setPosixFilePermissions(pathDest, perms);  //修改图片文件的权限
        } catch (Exception e) {
            System.err.println(e);
//            e.printStackTrace();
        }
    }

    public static void mkDir(File file) {
        if (file != null && file.getParentFile() != null && file.getParentFile().exists()) {
            file.mkdir();
            setPermission(file);
        } else {
            mkDir(file.getParentFile());
            file.mkdir();
            setPermission(file);
        }
    }

}
